/*-------------------------------------------------------------------------
  Author (C) 2008, Charles Wang <charlesw123456@gmail.com>

  This program is free software; you can redistribute it and/or modify it 
  under the terms of the GNU General Public License as published by the 
  Free Software Foundation; either version 2, or (at your option) any 
  later version.

  This program is distributed in the hope that it will be useful, but 
  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  for more details.

  You should have received a copy of the GNU General Public License along 
  with this program; if not, write to the Free Software Foundation, Inc., 
  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

  As an exception, it is allowed to write an extension of Coco/R that is
  used as a plugin in non-free software.

  If not otherwise stated, any source code generated by Coco/R (other than 
  Coco/R itself) does not fall under the GNU General Public License.
-------------------------------------------------------------------------*/
#include  "Scanner4Xml.h"

/*---- XmlSpecSubLists ----*/
static const CcxTag_t XmlTags[] = {
    { "author", 53, 54 },
    { "category", 25, 26 },
    { "channel", 3, 4 },
    { "cloud", 31, 32 },
    { "comments", 55, 56 },
    { "copyright", 15, 16 },
    { "description", 11, 12 },
    { "docs", 29, 30 },
    { "enclosure", 57, 58 },
    { "generator", 27, 28 },
    { "guid", 59, 60 },
    { "height", 51, 52 },
    { "image", 35, 36 },
    { "item", 5, 6 },
    { "language", 13, 14 },
    { "lastBuildDate", 23, 24 },
    { "link", 9, 10 },
    { "managingEditor", 17, 18 },
    { "name", 41, 42 },
    { "pubDate", 21, 22 },
    { "rating", 37, 38 },
    { "rss", 1, 2 },
    { "skipDays", 45, 46 },
    { "skipHours", 43, 44 },
    { "source", 61, 62 },
    { "textInput", 39, 40 },
    { "title", 7, 8 },
    { "ttl", 33, 34 },
    { "url", 47, 48 },
    { "webMaster", 19, 20 },
    { "width", 49, 50 },
};
static const CcxAttr_t XmlAttrs[] = {
    { "domain", 63 },
    { "path", 65 },
    { "port", 64 },
    { "protocol", 67 },
    { "registerProcedure", 66 },
};
static const CcxPInstruction_t XmlPIs[] = {
};
/*---- enable ----*/

static const CcxSpec_t XmlSpecList[] = {
    /*---- XmlSpecList ----*/
    { "", TRUE,
	{ -1, -1, -1, -1, 68, -1, -1, -1, -1, -1, -1, -1, -1, },
	XmlTags + 0, 31,
	XmlAttrs + 0, 5,
	NULL, 0, /* Processing Instructions */
    },
    /*---- enable ----*/
};

RssScanner_t *
RssScanner(RssScanner_t * self, CcsErrorPool_t * errpool, FILE * infp)
{
    /*---- kindUnknownNS ----*/
    self->base.kindUnknownNS = -1;
    /*---- enable ----*/
    self->base.firstXmlSpec = XmlSpecList;
    self->base.numXmlSpecs = sizeof(XmlSpecList) / sizeof(XmlSpecList[0]);
    return (RssScanner_t *)CcxScanOper(&self->base, errpool, infp);
}

RssScanner_t *
RssScanner_ByName(RssScanner_t * self, CcsErrorPool_t * errpool,
		  const char * infn)
{
    /*---- kindUnknownNS ----*/
    self->base.kindUnknownNS = -1;
    /*---- enable ----*/
    self->base.firstXmlSpec = XmlSpecList;
    self->base.numXmlSpecs = sizeof(XmlSpecList) / sizeof(XmlSpecList[0]);
    return (RssScanner_t *)CcxScanOper_ByName(&self->base, errpool, infn);
}

void
RssScanner_Destruct(RssScanner_t * self)
{
    CcxScanOper_Destruct(&self->base);
}
